package com.song.tools.mvc.validator;

import javax.validation.constraints.NotNull;
import java.util.function.Supplier;

/**
 * 参数校验器
 *
 * @author song tools
 * @since 2024-06-21
 */
public interface ParamValidator<ParamValue> {
    /**
     * 执行参数校验
     *
     * @param paramValueSupplier 参数值supplier
     * @return 校验结果，包含是否通过及失败原因
     */
    ValidationResult validate(@NotNull Supplier<ParamValue> paramValueSupplier);

    /**
     * 获取默认的错误信息描述。
     * <p>
     * 该方法用于返回一个默认的错误信息描述，当系统发生错误，但没有特定的错误描述时，可以使用这个默认描述。
     * 这对于保持系统的一致性和提供基本的错误反馈是非常有用的。
     *
     * @return 默认的错误信息描述，以字符串形式返回。
     */
    default String getDefaultErrorMessage() {
        return "参数校验失败";
    }
}
